DataFrame
DataFrame
类似于二维数组,有行索引和列索引
- 行索引,横向索引,叫index, 0轴,axis=0
- 列索引,纵向索引,叫columns, 1轴,axis=1
DataFrame创建
# 导入pandas
import pandas as pd
pd.DataFrame(data=None, index=None, columns=None)
- 参数
- index: 行索引,为空,默认创建0-N的整数索引
- columns: 列标签,同上
# 生成日期
pd.date_range(start, end, periods, freq)
- 参数
- start: 起始日期
- end: 结束日期
- periods: 天数
- freq: 默认一天挨着一天,如果指定为B,跳过周六日
>>> score = np.random.randint(40, 100, (10, 5))
>>> score
array([[52, 56, 68, 69, 97],
[74, 48, 52, 77, 83],
[87, 42, 86, 52, 80],
[51, 84, 98, 59, 83],
[54, 75, 49, 62, 49],
[80, 83, 71, 82, 61],
[78, 81, 99, 86, 95],
[64, 49, 88, 45, 55],
[82, 91, 92, 84, 43],
[89, 74, 78, 75, 52]])
>>> score_df = pd.DataFrame(score)
>>> score_df
0 1 2 3 4
0 52 56 68 69 97
1 74 48 52 77 83
2 87 42 86 52 80
3 51 84 98 59 83
4 54 75 49 62 49
5 80 83 71 82 61
6 78 81 99 86 95
7 64 49 88 45 55
8 82 91 92 84 43
9 89 74 78 75 52
>>> subjects = ['语文', '数学', '英语', '政治', '体育']
>>> stu = ['同学' + str(i) for i in range(score_df.shape[0])]
>>> data = pd.DataFrame(score, columns=subjects, index=stu)
>>> stu
['同学0', '同学1', '同学2', '同学3', '同学4', '同学5', '同学6', '同学7', '同学8', '同学9']
>>> data
语文 数学 英语 政治 体育
同学0 52 56 68 69 97
同学1 74 48 52 77 83
同学2 87 42 86 52 80
同学3 51 84 98 59 83
同学4 54 75 49 62 49
同学5 80 83 71 82 61
同学6 78 81 99 86 95
同学7 64 49 88 45 55
同学8 82 91 92 84 43
同学9 89 74 78 75 52
DataFrame的属性
- shape
- index
- columns
- T
DataFrame的方法
- head()
- tail()
>>> data.shape # 获取形状
(10, 5)
>>> data.index # 获取行索引
Index(['同学0', '同学1', '同学2', '同学3', '同学4', '同学5', '同学6', '同学7', '同学8', '同学9'], dtype='object')
>>> data.columns # 获取列索引
Index(['语文', '数学', '英语', '政治', '体育'], dtype='object')
>>> data.values # 获取所有的值
array([[52, 56, 68, 69, 97],
[74, 48, 52, 77, 83],
[87, 42, 86, 52, 80],
[51, 84, 98, 59, 83],
[54, 75, 49, 62, 49],
[80, 83, 71, 82, 61],
[78, 81, 99, 86, 95],
[64, 49, 88, 45, 55],
[82, 91, 92, 84, 43],
[89, 74, 78, 75, 52]])
>>> data.T # 行列互换
同学0 同学1 同学2 同学3 同学4 同学5 同学6 同学7 同学8 同学9
语文 52 74 87 51 54 80 78 64 82 89
数学 56 48 42 84 75 83 81 49 91 74
英语 68 52 86 98 49 71 99 88 92 78
政治 69 77 52 59 62 82 86 45 84 75
体育 97 83 80 83 49 61 95 55 43 52
>>> data.head() # 默认5行, 取前5行
语文 数学 英语 政治 体育
同学0 52 56 68 69 97
同学1 74 48 52 77 83
同学2 87 42 86 52 80
同学3 51 84 98 59 83
同学4 54 75 49 62 49
>>> data.tail() # 默认5行 取后5行
语文 数学 英语 政治 体育
同学5 80 83 71 82 61
同学6 78 81 99 86 95
同学7 64 49 88 45 55
同学8 82 91 92 84 43
同学9 89 74 78 75 52
索引的修改
>>> stu = ['同学_' + str(i) for i in range(score_df.shape[0])]
>>> data.index = stu
语文 数学 英语 政治 体育
同学_0 52 56 68 69 97
同学_1 74 48 52 77 83
同学_2 87 42 86 52 80
同学_3 51 84 98 59 83
同学_4 54 75 49 62 49
同学_5 80 83 71 82 61
同学_6 78 81 99 86 95
同学_7 64 49 88 45 55
同学_8 82 91 92 84 43
同学_9 89 74 78 75 52
pd.index = index_new
注意:要修改索引,必须整体进行修改,不能够局部进行修改。
重设索引
reset_index(drop=False)
- 设置新的下标索引
- drop: 默认为False, 不删除原来索引,如果为True,删除原来的索引值
# 重置索引,drop=False
>>> data.reset_index()
index 语文 数学 英语 政治 体育
0 同学0 52 56 68 69 97
1 同学1 74 48 52 77 83
2 同学2 87 42 86 52 80
3 同学3 51 84 98 59 83
4 同学4 54 75 49 62 49
5 同学5 80 83 71 82 61
6 同学6 78 81 99 86 95
7 同学7 64 49 88 45 55
8 同学8 82 91 92 84 43
9 同学9 89 74 78 75 52
以某列值设置为新的索引
set_index(keys, drop=True)
:
- keys: 列索引名或者列索引名称的列表
- drop: boolean, default True. 当做新的索引,删除原来的列
>>> df = pd.DataFrame({'month': [1, 4, 7, 10],
'year': [2012, 2014, 2013, 2014],
'sale':[55, 40, 84, 31]})
>>> df
month year sale
0 1 2012 55
1 4 2014 40
2 7 2013 84
3 10 2014 31
以月份设置新的索引
>>> df.set_index('month') # 设置月份为新的索引
year sale
month
1 2012 55
4 2014 40
7 2013 84
10 2014 31
设置多个索引,以年和月份
# 设置多个索引,以年和月份
>>> df =df.set_index(['year', 'month'])
>>> df
sale
year month
2012 1 55
2014 4 40
2013 7 84
2014 10 31